package com.chn.hourent.view;

import com.chn.hourent.model.House;
import com.chn.hourent.service.HouseService;
import com.chn.hourent.tools.Utility;

//显示界面，接收用户输出，调用各种方法
public class HouseView {//第一层封装，直接使用Service提供的方法进行操作
    private boolean loop = true;//控制显示菜单输出的循环
    private char key = ' ';//接收用户输入的选择
    private HouseService houseService = new HouseService(4);

    //创建此对象仅为使用HouseService内部的方法和传入参数size来限制数组长度，并未实际使用此类(我的描述不准确，但能理解就行)
    public void updateHouse() {
        System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━修改房屋信息━━━━━━━━━━━━━━━━━━━━━━━━━┓");
        System.out.print("  请输入要修改的房屋编号(输入-1退出)：");
        int updateId = Utility.readInt();
        if (updateId == -1) {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         放弃修改信息         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            return;
        }
        House aim = houseService.findById(updateId);//返回的是引用类型，就是数组的元素
        if (aim == null) {
            System.out.println("  要修改的房屋编号不存在");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            return;
        }
        else
        {
            System.out.print("  姓名("+aim.getName()+"):");//如果用户直接回车不输入则表示不修改该信息
            aim.setName(Utility.readString(8,aim.getName()));
            //setName为修改aim(house类)的某值，Utility.readString为预编写函数
            //8为限制输入的字符串长度，后面为若输入值为空，自动赋的值，getName为查看aim(house类)的某值
            System.out.print("  电话("+aim.getNum()+"):");
            aim.setNum(Utility.readString(12,aim.getNum()));
            System.out.print("  地址("+aim.getAddress()+"):");
            aim.setAddress(Utility.readString(16,aim.getAddress()));
            System.out.print("  租金("+aim.getRent()+"):");
            aim.setRent(Utility.readInt(aim.getRent()));
            System.out.print("  是否租出("+aim.getState()+"):");
            aim.setState(Utility.readString(3,aim.getState()));
            System.out.println("  修改房屋信息成功");
        }
        System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    }

    public void findHouse() {//根据id查找房屋信息
        System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━查找房屋信息━━━━━━━━━━━━━━━━━━━━━━━━━┓");
        System.out.print("  请输入要查找的房屋编号(输入-1退出)：");
        int findId = Utility.readInt();
        if (findId == -1) {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         放弃查找信息         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            return;
        }
        House aim = houseService.findById(findId);
        if (aim == null)
            System.out.println("  查找的房屋信息不存在");
        else
            System.out.println(aim);
        System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    }

    public void exit() {//退出时按Y确认
        char c = Utility.readConfirmSelection();
        if (c == 'Y') {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃       退出了房屋出租系统       ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            loop = false;
        }
    }

    public void delHouse() {//接收输入的编号，调用Service的del方法
        System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━删除房屋信息━━━━━━━━━━━━━━━━━━━━━━━━━┓");
        System.out.print("  请输入待删除的房屋编号(输入-1退出)：");
        int delId = Utility.readInt();
        System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");

        if (delId == -1) {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         放弃删除信息         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            return;
        }
        char choice = Utility.readConfirmSelection();//该方法自身带有无限循环判断，保证输出结果只能是Y或N
        if (choice == 'Y') {//再次确让是否删除
            if (houseService.del(delId)) {//查找到则返回true，未查找到返回false
                System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
                System.out.println("┃         删除房屋成功         ┃");
                System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");

            } else {
                System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
                System.out.println("┃         输入编号错误         ┃");
                System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            }
        } else {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         放弃删除信息         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        }
    }

    public void addHouse() {//接收输入的新House信息(不包含编号)，创建House对象，调用add方法
        System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━添加房屋━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
        System.out.print("  姓名：");
        String name = Utility.readString(8);
        System.out.print("  电话：");
        String num = Utility.readString(12);
        System.out.print("  地址：");
        String add = Utility.readString(16);
        System.out.print("  月租：");
        int rent = Utility.readInt();
        System.out.print("  是否租出：");
        String state = Utility.readString(3);
        System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        House addroom = new House(0, name, num, add, rent, state);//此处的0只起占位作用，实际值并非0
        if (houseService.add(addroom)) {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         添加房屋成功         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        } else {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃         添加房屋失败         ┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
        }
    }

    public void listHouse() {
        House[] house = houseService.list();//得到所有的房屋信息
        System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━房屋列表━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
        System.out.println("   编号\t姓名\t\t电话\t\t地址\t\t\t\t\t月租\t\t是否租出");
        for (int i = 0; i < house.length; i++) {
            if (house[i] == null)
                break;
            System.out.println(house[i]);
        }
        System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");

    }

    public void Menu() {
        do {
            System.out.println("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━欢迎使用房屋出租系统━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
            System.out.println("┃┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃");
            System.out.println("┃┃                               菜单选择                               ┃┃");
            System.out.println("┃┃                                                                     ┃┃");
            System.out.println("┃┃                             1、新增房源                               ┃┃");
            System.out.println("┃┃                             2、查找房屋                               ┃┃");
            System.out.println("┃┃                             3、删除房屋                               ┃┃");
            System.out.println("┃┃                             4、修改信息                               ┃┃");
            System.out.println("┃┃                             5、房屋列表                               ┃┃");
            System.out.println("┃┃                             6、退   出                               ┃┃");
            System.out.println("┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┃");
            System.out.println("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
            System.out.print("  请输入你的选择：");
            key = Utility.readChar();
            switch (key) {
                case '1':
                    addHouse();
                    break;
                case '2':
                    findHouse();
                    break;
                case '3':
                    delHouse();
                    break;
                case '4':
                    updateHouse();
                    break;
                case '5':
                    listHouse();
                    break;
                case '6':
                    exit();
                    break;
            }
        } while (loop);
    }
}
